package com.woniu.stafforder.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author dingpf
 * @version 1.0
 * @description
 * @create 2024/1/3 14:42
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplateInit(RedisConnectionFactory redisConnectionFactory) {

        // 创建RedisTemplate对象
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        // 创建序列化对象
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 创建序列化对象
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        // 设置redis连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 设置key和value的序列化方式 选择合适的序列化方式，以确保Redis中的数据能够被Java代码正确读取和序列化。
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);

        // 设置hash key 和value序列化方式 在Redis中存储和获取散列值（Hash Key和Value），请确保使用相同的序列化模式，以便在Java代码中进行正确的操作
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        return redisTemplate;
    }
}